%%%-------------------------------------------------------------------
%%% @author mirahs(2892727493@qq.com)
%%% @doc
%%%     后台调用处理器
%%% @end
%%%-------------------------------------------------------------------
-module(net_web_handler_tpl).

-export([
    handle/5

    ,unixtime/0
]).

-include("common.hrl").
-include("env.hrl").


%%%===================================================================
%%% API functions
%%%===================================================================

handle(Module, Func, Args, Time, Sign) ->
    case handle_check(Module, Args, Time, Sign) of
        ok ->
            case apply(Module, Func, Args) of
                ok -> jsx:encode([{code, 0}]);
                {ok, Ret} -> jsx:encode([{code, 0}, {data, Ret}]);
                {error, Error} -> jsx:encode([{code, 1}, {msg, Error}]);
                Ret -> jsx:encode([{code, 0}, {data, Ret}])
            end;
        {error, Error} ->
            jsx:encode([{code, 1}, {msg, Error}])
    end.


%%%===================================================================
%%% Internal functions
%%%===================================================================

handle_check(Module, Args, Time, Sign) ->
    Time2 = util_time:unixtime(),
    if
        abs(Time2 - Time > 60) -> {error, check_timeout};
        true ->
            Key = env_mgr:get(?ENV_NET_WEB_KEY),
            Sign2 = util_encrypt:md5(<<?BS(Args), "_", ?B(Time), "_", ?B(Key)>>),
            if
                Sign =/= Sign2 -> {error, check_sign};
                true -> ?IF(Module =:= ?MODULE, ok, {error, check_module})
            end
    end.


%%%===================================================================
%%% handle functions
%%%===================================================================

unixtime() ->
    util_time:unixtime().
